home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / zako041.c < prev   
C/C++ Source or Header  |  1999-06-14  |  3KB  |  157 lines

  1. /* ザコ4の弱いやつ(攻撃してこない) */
  2. #include <xsp2lib.h>
  3.  
  4. #include "../otoko.h"
  5. #include "../player.h"
  6. #include "../enemy.h"
  7. #include "../eshot.h"
  8. #include "../effect.h"
  9. #include "../priority.h"
  10. #include "../sound.h"
  11. #include "../psearch.h"
  12.  
  13. #define PALET_MAIN    0x0300
  14.  
  15.  
  16. static short points_disp;    /* 得点を表示するか */
  17.  
  18. static short EnemyMoveZako041 (ENEMY *);
  19. static void EnemyTiniZako041 (ENEMY *);
  20.  
  21.  
  22. /* ゲーム開始時に1回だけ呼ばれる */
  23. void EnemyInitStaticZako041 (void)
  24. {
  25.     points_disp = 0;
  26. }
  27.  
  28.  
  29. void EnemyInitZako041 (ENEMY * p)
  30. {
  31. #define    SPEED_0        25
  32.     {
  33.         signed short x;    /* 目的地の x */
  34.         char a;
  35.         if (SHORT_LX < 128 + 16)
  36.             x = player->x - 32;    /* 左側から登場したなら自機の少し左を */
  37.         else
  38.             x = player->x + 32;
  39.  
  40.         /* 目的地が画面外にならないように */
  41.         if (x < 32 + 16)
  42.             x = 32 + 16;
  43.         if (x > 256 - 32 + 16)
  44.             x = 256 - 32 + 16;
  45.         a = p->angle = psearch (x, SHORT_LY);
  46.         p->vx = vxtable[SPEED_0][a];
  47.         p->vy = vytable[SPEED_0][a];
  48.     }
  49.     p->hit_px = 8;
  50.     p->hit_py = 12;
  51.     p->hit_sx = 12;
  52.     p->hit_sy = 12;
  53.     p->hit_cx = 4;
  54.     p->m_work = 0;
  55.     p->damage = p->damage_core = 0;
  56.     p->hp = 1;
  57.     p->seq = 0;
  58.  
  59.     p->info = PALET_MAIN | PRIORITY_ZAKO;
  60.     p->core_pt = sp_core01 + 1;
  61.     p->core_info = PALET_CORE_BLUE | PRIORITY_ZAKO;
  62.     p->func_enemy_move = EnemyMoveZako041;
  63.     p->func_enemy_tini = EnemyTiniZako041;
  64. }
  65.  
  66.  
  67.  
  68. static short EnemyMoveZako041 (ENEMY * p)
  69. {
  70.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  71.     p->x = (p->lx += p->vx) >> 16;
  72.     p->y = (p->ly += p->vy) >> 16;
  73.  
  74.     switch (p->seq) {
  75.     case 0:        /* まず突っ込んでくる */
  76.         /* ある程度進んだか自機に近付いたら減速 */
  77.         if ((p->m_work++ > 45) || (p->y > player->y - 32)) {
  78.             p->seq++;
  79.             p->m_work = 0;
  80.             p->m_work2 = 0;
  81.         }
  82.         break;
  83.     case 1:        /* 減速 */
  84. #define    SPEED_1    0
  85.         if (p->m_work2++ > 5) {
  86.             p->m_work2 = 0;
  87.             p->vx -= vxtable[SPEED_1][p->angle];
  88.             p->vy -= vytable[SPEED_1][p->angle];
  89.             p->vy += 4096;
  90.             if (p->m_work++ > 4) {
  91.                 p->seq++;
  92.                 //p->vx = p->vy = 0;
  93.                 p->core_info = PALET_CORE_RED | PRIORITY_ZAKO;    /* コア赤くなる */
  94.             }
  95.         }
  96.         break;
  97.  
  98.         /* 撤退 */
  99.     case 2:
  100.         if (SHORT_VY > -3)
  101.             p->vy -= 4096;
  102.  
  103.         if ((p->angle > 192 - 4) && (p->angle < 192 + 4)) {
  104.             p->angle = 192;
  105.         } else {
  106.             /* 上を向く */
  107.             if ((unsigned char) (p->angle - 192) > (unsigned char) 128)
  108.                 p->angle += 4;
  109.             else
  110.                 p->angle -= 4;
  111.         }
  112.         p->pt = obj_zako04 + ((p->angle) >> 3);
  113.         /* 画面外に出たら消去 */
  114.         if (p->y < -32)
  115.             return (-1);    /* 消去 */
  116.         break;
  117.     default:
  118.         break;
  119.     }
  120.     p->pt = obj_zako04 + ((p->angle) >> 3);
  121.  
  122.  
  123.     /* 自機ショットに当たった時の処理 */
  124.     /* ザコは一撃で死ぬのでコア云々は考慮しなくて良い */
  125.     if (p->damage) {
  126.         EffectInit (EFFECT_EXPLZAKO, 0, p->x, p->y);
  127.         SoundSetSE (SE_EXPL);
  128.         if (points_disp < ZAKO_SCORE_DISP) {
  129.             points_disp++;
  130.             if (p->core_info == (PALET_CORE_RED | PRIORITY_ZAKO))
  131.                 EffectInit (EFFECT_POINTS_RED, POINTS_200, p->x, p->y);
  132.             else
  133.                 EffectInit (EFFECT_POINTS_BLUE, POINTS_100, p->x, p->y);
  134.         } else {
  135.             if (p->core_info == (PALET_CORE_RED | PRIORITY_ZAKO))
  136.                 EffectInit (EFFECT_POINTS, POINTS_200, p->x, p->y);
  137.             else
  138.                 EffectInit (EFFECT_POINTS, POINTS_100, p->x, p->y);
  139.         }
  140.         return (-1);    /* 消去 */
  141.     }
  142.     xobj_set_st (p);
  143.  
  144.     /* コアの表示 */
  145.     p->core_x = p->x - 8;
  146.     p->core_y = p->y - 8;
  147.     xsp_set_st (&(p->core_x));
  148.  
  149.     return (0);
  150. }
  151.  
  152.  
  153.  
  154. static void EnemyTiniZako041 (ENEMY * p)
  155. {
  156. }
  157.